2.1 应用层原理概述

网络应用是互联网存在的理由。应用层便承载了网络应用及其应用协议。

由于网络核心的节点没有应用层一说,研发网络应用程序的核心便是让应用能够在多个 端系统 上运行。

网络应用的架构

网路应用的主流架构目前有:客户-服务器结构P2P结构 与两者混合的结构。

C/S 体系结构中,有一台持续运行并监听特定端口的 服务器,负责响应 客户 发来的请求并提供客户需要的服务。在这一模式中,服务器需要维持固定的、周知的 IP 地址与端口号,被动接受客户的请求;而客户端可以使用不同的 IP 地址主动向服务器发起请求。然而不同的客户端之间不会直接进行通信。

C/S 体系的最大问题在于其是 不可拓展的。因此,一旦请求流量超出某一阈值,服务器能提供服务的能力就会断崖式下降,服务可靠性下降。

P2P 体系结构中,应用程序可以在被称为 对等体 的主机对之间直接建立通信,每一个节点及可以是服务器也可以是客户端。

P2P 具有 自拓展性,这使得在某一个 P2P 集群中加入新的节点不会造成太大的开销。然而,由于松散、去中心化的结构,P2P 模式难以进行统一管理,可能会有安全、可靠性问题。

进程通信

我们这里主要讨论运行在不同端系统上的进程之间相互通信的问题。

不同端系统上的进程需要交换 报文 以进行通信。我们称 主动发起通信 的进程为 客户被动等待连接 的进程为 服务器

为了完成分布式的进程通信,需要解决如下问题:

  1. 如何对进程进行标识与寻址

解决方法:对应用层与传输层之间用于传输信息的 SAP 进行标识。具体方法:通过 IP 地址 标识主机信息;采用 TCP 或 UDP 协议,通过 端口号 标识进程信息。因此,一个 IP + Port 对便能唯一标识某个进程。

部分流行应用一般使用一个固定端接口号,例如:Web服务 / HTTP:80;邮件服务 / SMTP:25。详细请见:www.iana.org

  1. 如何调用传输层提供的服务

解决方法:应用进程生成包含 报文、发送方、接收方 的 SDU 传送给传输层,再由传输层进行传输,或从传输层获取应用层可以读取的 SDU。传输层自身对数据的封装处理等操作应用层并不关心。这样的应用层与传输层的层间接口被称作 套接字(Socket)。由于其可编程的特性,又属于一种 应用编程接口(Application Programming Interface,API)

然而,每次向 Socket API 传送分组时都要附加发送方与接收方的信息过于冗余,不方便管理。因此 操作系统 维护了一个 Socket 句柄(Handler)与实际发送方与接收方的 IP + Port 对的字典。应用进程需要通过 Socket 向传输层发送分组时,只需要从操作系统处获得一个 Socket Handler,对该 Handler 进行处理即可,如同对文件进行操作一样。操作系统负责根据应用层调用的 Handler 提取出实际的 IP + Port 对交给传输层。该主机传输层之下与目标主机都无需知道该 Handler 的存在,也无需确保该 Handler 在各方端系统上是相同的。

具体到实际情况而言,根据使用的传输协议是 TCP 还是 UDP,Socket 的具体内容可能不同。对 TCP 而言,TCP Socket 存储了一个 (源 IP, 源 Port, 目标 IP, 目标 Port) 的四元组。其 唯一指定了两个进程之间的一个会话(Session),因此应用进程每次发包都无需专门指定发送方与接收方的信息。然而对于 UDP 而言,由于 UDP 是无连接的,UDP Socket 存储的是一个 (源 IP, 源 Port) 的二元组。应用进程每次发送报文都必须提供目标主机的 IP + Port 对。

  1. 如何利用传输层提供的服务实现进程之间的报文交换

解决方法:制定 应用层协议(Application-Layer Protocol),其定义了运行在不同操作系统上的应用应该如何传递报文。具体而言:

应用协议分为公开的协议与专有的协议。

应用协议是网络应用相当重要的一部分,但并不是全部。

传输层提供的服务

传输层协议向应用层应用提供的服务一般通过如下四个指标来衡量:可靠性、吞吐量、定时、安全性

常见应用对传输服务的要求如下:
Pasted image 20250311135123.png

目前传输层提供的服务按照选择的传输层协议分为 TCP 服务与 UDP 服务两种:

TCP 服务是 可靠的、面向连接 的传输服务。其有 流量控制、拥塞控制 服务。然而传输延迟相对较高,无法保证最小吞吐量与安全性。

UDP 服务是 不可靠的、无连接 的传输服务,没有流量控制、拥塞控制、时间、吞吐量、安全性保证。然而它相较于 TCP 更为轻量化,传输数据的速度相对而言更快。

目前常见应用使用的应用层协议与传输协议如下:
Pasted image 20250311135528.png

由于 TCP 与 UDP 都是明文传输的数据,为保证安全性,又有了诸如 SSL 与TCL 这些作用于应用层与传输层之间的对数据进行安全加密的协议。